﻿#include<iostream>
#include<map>
#include<sstream>
using namespace std;

const int N = 1010;

/*
手写堆(这里使用小顶堆，本题n就是sz)
1、插入数
	hp[++sz] = x; up(size);
2、求最小值
	hp[1];
3、删除最小值
	hp[1] = hp[sz]; sz--; down(1);
4、删除任意位置元素
	hp[k] = hp[sz]; sz--; down(k); up(k);
5、修改任意位置元素
	hp[k] = x; down(k); up(k);

元素的值与下标使用map键值对来对应，交换时多一步交换
*/

int hp[N];
int n, m;
map<int, int>mp;

void down(int u)
{
	int t = u;
	//找出父节点和两个子节点中的最小值的下标
	if (u << 1 <= n && hp[u << 1] < hp[u])t = u << 1;
	if ((u << 1 | 1) <= n && hp[u << 1 | 1] < hp[t])t = u << 1 | 1;
	if (t != u) {
		//将该最小值调整为父亲节点，移动下去的节点需要接着判断
		swap(hp[t], hp[u]);
		swap(mp[hp[t]], mp[hp[u]]);
		down(t);
	}
}

void up(int u)
{
	while (u >> 1 && hp[u] < hp[u >> 1]) {
		swap(hp[u >> 1], hp[u]);
		swap(mp[hp[u >> 1]], mp[hp[u]]);
		u >>= 1;
	}
}

int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> hp[i];
		hp[i] += 11111;
		mp[hp[i]] = i;
		up(i);//题目要求建堆的时候要边插入边建，不能使用下面那种先建好树再交换的建堆方式
	}
	/*for (int i = n / 2; i; i--)down(i);*/
	while (m--) {
		int val, sl, c, p;
		string s;
		stringstream ss;
		cin >> val;
		val += 11111;
		getline(cin, s);
		switch (s[4]) {
		case 't':
			if (s[11] == 't') {
				if (hp[1] == val) {
					cout << "T" << endl;
				}
				else {
					cout << "F" << endl;
				}
			}
			else {
				ss << s;
				ss >> s >> s >> s >> s >> c;
				c += 11111;
				if (mp[c] / 2 && hp[mp[c] / 2] == val) {
					cout << "T" << endl;
				}
				else {
					cout << "F" << endl;
				}
			}
			break;
		case 'a':
			ss << s;
			ss >> s >> s >> s >> s >> p;
			p += 11111;
			if (((mp[p] << 1) <= n && hp[mp[p] << 1] == val) || ((mp[p] << 1 | 1) <= n && hp[mp[p] << 1 | 1] == val)) {
				cout << "T" << endl;
			}
			else {
				cout << "F" << endl;
			}
			break;
		case ' ':
			ss << s;
			ss >> s >> sl;
			sl += 11111;
			if (mp[val] % 2) {
				if (mp[val] - 1 && hp[mp[val] - 1] == sl) {
					cout << "T" << endl;
				}
				else {
					cout << "F" << endl;
				}
			}
			else {
				if (mp[val] + 1 <= n && hp[mp[val] + 1] == sl) {
					cout << "T" << endl;
				}
				else {
					cout << "F" << endl;
				}
			}
			break;
		}
	}
	return 0;
}